home
***
CD-ROM
|
disk
|
FTP
|
other
***
search
/
FM Towns: Free Software Collection 10
/
FM Towns Free Software Collection 10.iso
/
fb386
/
tool
/
watanabe
/
medit
/
medit_b.bas
< prev
next >
Wrap
BASIC Source File
|
1995-01-22
|
5KB
|
116 lines
60000 '
60010 '『文字編集サブルーチン TYPE B』使用例
60020 CLEAR ,,1024,100000,6,0:LOADM"keyclear.rex",0
60030 CONSOLE 0,24,2:COLOR 0,7:CLS
60040 LOCATE 1,10:PRINT "文字を編集してください。"
60050 COLOR 1:LINE(0,463)-(639,479),PSET,0,BF,0
60060 E_文字$="文字列編集サブルーチン TYPE B v1.02 (C)渡辺 良一"
60070 E_字数=255:E_X=25:E_Y=10
60080 E_CR0=15:E_CR1=10
60090 GOSUB *文字編集:END
60100 '★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★
60110 '★ プログラム開発支援シリーズ第5弾 ★
60120 '★ 文字列編集サブルーチン TYPE B v1.02 ★
60130 '★ 94年10月14日(金) (C)渡辺 良一 ★
60140 '★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★
60150 '
60160 '変数紹介(先頭の『E_』は省略)
60170 ' 文字$,M$ ……… 編集する文字列
60180 ' X,Y ……… 文字を表示する文字座標
60190 ' 字数 ……… 編集する文字の最大の長さ(半角計算)
60200 ' CR0 ……… 背景色
60210 ' CR1 ……… カーソルの色
60220 ' CR ……… カーソル移動時に使用
60230 ' L,M,N,X2,Y2 ……… 文字表示時に使用(L,M,Nは↓でも使用)
60240 ' X3,Y3,Z ……… カーソルを表示する時に使用
60250 ' C ……… カーソルの文字列中の位置(文字数で)
60260 ' I,I2 ……… カーソルを移動させる文字座標
60270 ' K$,K ……… 入力された文字とそのキャラクタコード
60280 '
60290 *文字編集
60300 CALLM 0
60310 GOSUB *E_文字表示
60320 E_X2=LEN(E_文字$):E_C=KLEN(E_文字$)
60330 GOSUB *E_表示
60340 *E_INKEY
60350 E_K$=INKEY$
60360 IF E_K$="" THEN *E_INKEY
60370 E_K=ASC(E_K$)
60380 ' ↓実行キー
60390 IF E_K=13 THEN GOSUB *E_消す:RETURN
60400 IF E_K=24 THEN GOSUB *E_消す:RETURN '復帰する場所を指定
60410 ' ↑取消キー
60420 IF E_K=5 AND E_X2<LEN(E_文字$) THEN *E_一括削除
60430 IF E_K=8 AND E_C >0 THEN *E_後退
60440 IF E_K=127 THEN IF E_X2<E_字数 THEN *E_削除 ELSE *E_INKEY
60450 IF E_K=28 AND E_X2<LEN(E_文字$) THEN E_I= 1:GOTO *E_左右移動 '右
60460 IF E_K=29 AND E_C >0 THEN E_I=-1:GOTO *E_左右移動 '左
60470 IF E_K<32 THEN *E_INKEY '↓日本語文字なら次も入力する
60480 IF (127<E_K AND E_K<160) OR 223<E_K THEN E_K$=E_K$+INKEY$
60490 '**** 文字入力 *********
60500 IF LEN(E_文字$)+LEN(E_K$)>E_字数 THEN BEEP:CALLM 0:GOTO *E_INKEY
60510 E_文字$=KLEFT$(E_文字$,E_C)+E_K$+KMID$(E_文字$,E_C+1)
60520 E_I=1:E_I2=LEN(E_K$):GOSUB *E_文字表示:GOTO *E_移動
60530 '
60540 *E_一括削除
60550 E_文字$=KLEFT$(E_文字$,E_C)+STRING$(LEN(E_文字$)-E_X2,32)
60560 GOSUB *E_文字表示
60570 E_文字$=KLEFT$(E_文字$,E_C)
60580 GOTO *E_INKEY
60590 *E_後退
60600 IF KTYPE(E_文字$,E_C) THEN E_I2=-2 ELSE E_I2=-1
60610 E_M$=E_文字$:E_文字$=KLEFT$(E_M$,E_C-1)
60620 IF E_C<255 THEN E_文字$=E_文字$+KMID$(E_M$,E_C+1)
60630 GOSUB *E_文字表示:E_I=-1:GOTO *E_移動
60640 *E_削除
60650 E_M$=E_文字$:E_文字$=KLEFT$(E_M$,E_C)
60660 IF E_C<254 THEN E_文字$=E_文字$+KMID$(E_M$,E_C+2)
60670 GOSUB *E_文字表示
60680 GOTO *E_INKEY
60690 *E_左右移動 '↓右移動なら+1 ↓日本語文字ならば
60700 IF KTYPE(E_文字$,29-E_K +E_C) THEN E_I2=E_I*2 ELSE E_I2=E_I
60710 '************************
60720 *E_移動
60730 E_C=E_C+E_I
60740 GOSUB *E_消す
60750 E_CR=E_CR1:E_X2=E_X2+E_I2
60760 GOSUB *E_表示
60770 GOTO *E_INKEY
60780 *E_消す:E_CR=E_CR0:GOSUB *E_書く:RETURN 'カーソル消す
60790 *E_表示 '******カーソル表示******
60800 E_X3=E_X+E_X2:E_Y3=0:E_N=0:E_Z=0
60810 WHILE E_X3>79
60820 IF E_Y3=0 THEN E_L=E_X ELSE E_L=0
60830 E_M=ASC(MID$(E_文字$,80-E_L+E_Z,1))
60840 IF (127<E_M AND E_M<160) OR 223<E_M THEN
60850 E_M=ASC(MID$(E_文字$,79-E_L+E_Z,1))
60860 E_N=1:IF (127<E_M AND E_M<160) OR 223<E_M THEN E_N=0
60870 ENDIF
60880 E_Z=E_Z+80-E_N-E_L:E_X3=E_X3-80+E_N
60890 E_N=0:E_Y3=E_Y3+1
60900 WEND
60910 E_CR=E_CR1:GOSUB *E_書く
60920 RETURN
60930 *E_書く:LINE(E_X3*8,(E_Y+E_Y3)*19)-STEP(1,15),PSET,%E_CR,B:RETURN
60940 *E_文字表示
60950 E_M$=E_文字$:E_Y2=0
60960 IF LEN(E_M$)=0 THEN LOCATE E_X,E_Y:PRINT" ";" "
60970 WHILE LEN(E_M$)
60980 E_N=LEN(E_M$)
60990 IF E_Y2=0 THEN E_L=E_X ELSE E_L=0
61000 LOCATE E_L,E_Y+E_Y2
61010 IF LEN(E_M$)+E_L<=80 THEN
61020 PRINT E_M$;" ";" ":E_M$=""
61030 ELSE
61040 E_M=ASC(MID$(E_M$,80-E_L,1))
61050 IF (127<E_M AND E_M<160) OR 223<E_M THEN E_N=0 ELSE E_N=1
61060 E_M=ASC(MID$(E_M$,79-E_L,1))
61070 IF (127<E_M AND E_M<160) OR 223<E_M THEN E_N=1
61080 PRINT LEFT$(E_M$,79+E_N-E_L);
61090 IF E_N=0 THEN PRINT" "
61100 E_M$=MID$(E_M$,80+E_N-E_L)
61110 E_Y2=E_Y2+1
61120 ENDIF
61130 WEND
61140 RETURN